package 集合.TEST;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class test3 {
    /*
    班里有N个学生
    要求：
    被点到的学生不会再被点到
    但是如果班级中所有学生都点完了，需要重新开启第二轮报名
    "小明","小庄","李明","梨园春","武林风","汤甲方","吴京","小红","李华","李丽"
     */
    /*
    思路:1.被点到的学生不会再被点到--->即将被点到的学生从原有的集合之中删除
        2.在进行一轮的点名---->即可以创建两个集合，将被点到学生加入到新的集合之中
        当原有的集合学生点完（清空状态），再将新集合(有着所有学生)加入到原有集合之中
     */
    public static void main(String[] args) {
//        创建集合
        ArrayList<String> list=new ArrayList<>();
//        在创建一个集合用于存储被删除的姓名
        ArrayList<String> list1=new ArrayList<>();
//        添加元素
        Collections.addAll(list,"小明","小庄","李明","梨园春","武林风","汤甲方","吴京","小红","李华","李丽");

        for (int j = 1; j < 4; j++) {
            System.out.println("================第"+j+"轮点名=============");

//       获得集合长度
            int length = list.size();
//      随机点名
            Random r = new Random();
            for (int i = 0; i < length; i++) {
/*      使用原有集合长度而不是list.size()的原因:
        随着循环的进行，i++,而list.size()由于remove的原因一直在减减
            即：i=0,list.size()=10;
            即：i=1,list.size()=9;
            即：i=2,list.size()=8;
            即：i=3,list.size()=7;
            即：i=4,list.size()=6;
            即：i=5,list.size()=5;
            此时在经过判断，i!<list.size()循环到此结束，而只删除5个姓名，所以用固定的长度
 */
//        获得索引
                int index = r.nextInt(list.size());
//        获得索引对应的姓名
                String name = list.get(index);
//        从原有集合删除姓名(不被点到)
                list.remove(name);
//            在list1中添加删除的元素
                list1.add(name);
                System.out.println(name);
//        此时完成了第一轮的点名,将点名循环
            }
//        System.out.println(list);
//        System.out.println(list1);
//        循环结束后，list没有元素，list1里有元素,将list1的元素添加到list中，开始第二轮点名
            list.addAll(list1);
            list1.clear();
//        再次测试，是否添加成功
//        System.out.println(list1);
//          最终，根据循环的要求，将代码进行循环，开始第N轮的点名
        }
    }
}
